package org.zjt.mr.weather;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;

/**
 * 要解决这个问题，就得借助GroupingComparator了，其工作机制是这样：
 * 当mapper输出的相同partition的kv数据到达一个Reducer后，会有一个聚合的过程，即将“相同”key的kv聚合到一起
 * （其实质是利用GroupingComparator来对key进行比较），然后将这一组聚合好的kv中最前面的一个kv的key传给reduce方法的入参key，将一个用来遍历这一组kv数据的values的迭代器iterator传给reduce方法的入参iterator。
 */
public class MyGroup extends WritableComparator {

    public MyGroup() {
        super(MyKey.class, true);
    }

    public int compare(WritableComparable a, WritableComparable b) {
        MyKey k1 = (MyKey) a;
        MyKey k2 = (MyKey) b;
        int r1 = Integer.compare(k1.getYear(), k2.getYear());
        if (r1 == 0) {
            return Integer.compare(k1.getMonth(), k2.getMonth());
        } else {
            return r1;
        }

    }
}
